Typecho文章cid、分类标签mid不连续解决方案

52次阅读
没有评论

共计 2184 个字符,预计需要花费 6 分钟才能阅读完成。

因为 Typecho 的机制,页面、附件都要占 cid。而且点击一次创建文章 cid 就会增加一次,即使你没有书写内容,那个 cid 也被认为已经使用了,所以下一次生成的 cid 就会跳过那个,造成不连续。

虽然不影响什么,也无关紧要,但是对于有强迫症的人来说,真的是无法忍受,看到了非得给改一下不可。

特别提醒:请在 PHP 7 以上版本的服务器上执行。本操作涉及数据库,请提前做好备份工作。

文章 cid

将以下代码保存为 php 文件并上传至网站根目录,在浏览器地址栏访问一下即可。

<?php
/**
* Typecho 重新排列文章 cid 让他连续
*/

// 设置数据库参数
$hostname_blog = "localhost";
$database_blog = " 数据库名 ";
$username_blog = " 数据库用户名 ";
$password_blog = " 数据库密码 ";

// 连接到数据库
$blog = mysqli_connect($hostname_blog, $username_blog, $password_blog, $database_blog) or die(mysqli_connect_error());

// 设置计数器的初始值
$no = 1;

// 定义一个函数来更新文章 cid
function change_id($cid)
{
    global $no, $blog;

    // 更新文章 cid,并更新与类别、标签、自定义字段和评论的关系
    mysqli_query($blog, "UPDATE typecho_contents SET cid = $no WHERE cid = $cid");
    mysqli_query($blog, "UPDATE typecho_relationships SET cid = $no WHERE cid = $cid");
    mysqli_query($blog, "UPDATE typecho_comments SET cid = $no WHERE cid = $cid");

    $no = $no + 1;
}

// 从数据库中选择所有文章 cid,按其 cid 排序
$query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC";
$result = mysqli_query($blog, $query_postRecord);

// 循环浏览文章并更新其 cid
while ($row = mysqli_fetch_assoc($result)) {change_id($row['cid']);
}

// 重置文章 cid 的自动递增值
mysqli_query($blog, "ALTER TABLE typecho_contents AUTO_INCREMENT = $no");

echo 'ok';

?>

Tips:文章 cid 重新排列后,上传的附件所属文章可能不正确,需手动修改。

分类标签 mid

将以下代码保存为 php 文件并上传至网站根目录,在浏览器地址栏访问一下即可。

<?php
/**
* Typecho 重新排列分类和标签(meta)不连续的 mid
*/

// 数据库参数
$hostname_blog = "localhost";
$database_blog = " 数据库名 ";
$username_blog = " 数据库用户名 ";
$password_blog = " 数据库密码 ";
$blog = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog);

// 检查错误
if ($blog->connect_error) {trigger_error($blog->connect_error, E_USER_ERROR);
}

// 定义全局变量以跟踪“no”值
$no = 1;

// 定义一个函数来更新 mid 及其关系
function change_id($mid)
{
    global $no;
    global $blog;

    // 更新 mid
    $sql = "UPDATE typecho_metas SET mid = ? WHERE mid = ?";
    $stmt = $blog->prepare($sql);
    $stmt->bind_param("ii", $no, $mid);
    $stmt->execute();

    // 更新关系
    $sql = "UPDATE typecho_relationships SET mid = ? WHERE mid = ?";
    $stmt = $blog->prepare($sql);
    $stmt->bind_param("ii", $no, $mid);
    $stmt->execute();

    // 递增 no 值
    $no++;
}

// 从数据库中获取所有 mid
$query_postRecord = "SELECT mid FROM typecho_metas ORDER BY mid ASC";
$all_postRecord = $blog->query($query_postRecord);

// 循环遍历结果并调用 change_id() 函数
while ($row_postRecord = $all_postRecord->fetch_assoc()) {change_id($row_postRecord['mid']);
}

// 重置 typecho_metas 表的自动增量值
$blog->query("ALTER TABLE typecho_metas AUTO_INCREMENT = $no");

echo 'ok';
?>

正文完
 0
三毛笔记
版权声明:本站原创文章,由 三毛笔记 于2023-08-24发表,共计2184字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)